﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SIGCBI.Entities;
using SIGCBI.Repository;
using Microsoft.Practices.Unity;
using System.Diagnostics;

namespace SIGCBI.BusinessLogic
{
    public interface IFuenteFinancieraBL
    {
        List<FUENTE_FINANCIERA> GetAllFromFuenteFinanciera();
        List<FUENTE_FINANCIERA> GetFromFuenteFinancieraByCriterio(string criterio);
        List<DETALLE_PARTIDA> GetFromDetalleFuenteFinancieraByIdFuente(int idFuente);
        FUENTE_FINANCIERA ValidarDuplicidadFuenteFinanciera (string codigo, int id);
        FUENTE_FINANCIERA GetFromFuenteFinancieraById(Int32 id);
        void AddFuenteFinanciera(FUENTE_FINANCIERA fuenteFinanciera);
        void UpdateFuenteFinanciera(FUENTE_FINANCIERA fuenteFinanciera);
        void DeleteFuenteFinanciera(int idFuenteFinanciera);
    }

    public class FuenteFinancieraBL : IFuenteFinancieraBL
    {
        [Dependency]
        public IFuenteFinancieraRepository partidaRepository { get; set; }

        public List<FUENTE_FINANCIERA> GetAllFromFuenteFinanciera()
        {
            return partidaRepository.GetAllFromFuenteFinanciera();
        }

        public List<FUENTE_FINANCIERA> GetFromFuenteFinancieraByCriterio(string criterio)
        {
            return partidaRepository.GetFromFuenteFinancieraByCriterio(criterio);
        }

        public List<DETALLE_PARTIDA> GetFromDetalleFuenteFinancieraByIdFuente(int idFuente)
        {
            return partidaRepository.GetFromDetalleFuenteFinancieraByIdFuente(idFuente);
        }

        public FUENTE_FINANCIERA ValidarDuplicidadFuenteFinanciera(string codigo, int id)
        {
            return partidaRepository.ValidarDuplicidadFuenteFinanciera(codigo, id);
        }

        public FUENTE_FINANCIERA GetFromFuenteFinancieraById(int id)
        {
            return partidaRepository.GetFromFuenteFinancieraById(id);
        }

        public void AddFuenteFinanciera(FUENTE_FINANCIERA fuenteFinanciera)
        {
            var msg = "";
            var ok = fuenteFinanciera.Validate(out msg);
            if (ok)
            {
                partidaRepository.AddFuenteFinanciera(fuenteFinanciera);
            }
            else
            {
                throw new Exception(msg);
            }
        }

        public void UpdateFuenteFinanciera(FUENTE_FINANCIERA fuenteFinanciera)
        {
            var msg = "";
            var ok = fuenteFinanciera.Validate(out msg);
            if (ok)
            {
                partidaRepository.UpdateFuenteFinanciera(fuenteFinanciera);
            }
            else
            {
                throw new Exception(msg);
            }
        }

        public void DeleteFuenteFinanciera(int idFuenteFinanciera)
        {
            partidaRepository.DeleteFuenteFinanciera(idFuenteFinanciera);
        }


    }
}
